package cn.itcast.bos.service.base.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import cn.itcast.bos.dao.base.CourierDao;
import cn.itcast.bos.dao.base.FixedAreaDao;
import cn.itcast.bos.dao.base.SubAreaDao;
import cn.itcast.bos.domain.base.Courier;
import cn.itcast.bos.domain.base.FixedArea;
import cn.itcast.bos.domain.base.SubArea;
import cn.itcast.bos.domain.base.TakeTime;
import cn.itcast.bos.service.base.FixedAreaService;

@Service
@Transactional
public class FixedAreaServiceImpl implements FixedAreaService {
	
	@Autowired
	private SubAreaDao subAreaDao;
	
	@Autowired
	private FixedAreaDao fixedAreaDao;
	
	@Autowired
	private CourierDao courierDao;
	
	/**
	  * @Description: 1、保存定区  2、分区关联定区(一对多关联：更新多方子表中外键值)
	  * //持久态：在一级缓存session中存在对象
		//托管态：对象存在ID(在数据库中有对应)
		//瞬时态：new 对象
	*/
	public void save(FixedArea model, String[] subAreaId) {
		//如果实体中主键是java基本类型，save方法保存完实体参数就是持久态
		//如果实体中主键不是java基本类型（String）,save方法返回结果才是持久态（来源于缓存）
		model=fixedAreaDao.save(model);
		if(subAreaId!=null&&subAreaId.length>0){
			for (String sId : subAreaId) {
				SubArea subArea = subAreaDao.findOne(sId);
				//持久态（有维护关系一方）关联持久态|托管态    -- 分区维护
				subArea.setFixedArea(model);	 //更新分区表中外键：定区id			
			}
		}
	}

	
	
	public Page<FixedArea> pageQuery(Pageable pageable) {
		return fixedAreaDao.findAll(pageable);
	}

	
	
	/**
	  * @Description:  1、定区关联快递员  2、快递员关联收派时间
	  * @return 
	*/
	public void associationCourierToFixedArea(String id, Integer courierId,Integer takeTimeId) {
		FixedArea fixedArea = fixedAreaDao.findOne(id);
		Courier courier = courierDao.findOne(courierId);
		//持久态关联持久态|托管态
		//关联-定区关联快递员
		fixedArea.getCouriers().add(courier);//向定区快递员关系表新增记录
		
		TakeTime takeTime = new TakeTime();
		takeTime.setId(takeTimeId);
		courier.setTakeTime(takeTime); //快递员关联收派时间   -- 更新快递员表中收派时间外键字段
		
	}

	 @Override
	public void assignSubarea2FixedArea(String id, List<String> subareaIds) {
		if(subareaIds!=null){
			for (String subareaid : subareaIds) {
				SubArea subArea = subAreaDao.findOne(subareaid);
				FixedArea fixedArea = fixedAreaDao.findOne(id);
				subArea.setFixedArea(fixedArea);
			}
		}
	} 
}
